#include "EstadoDeAtaque.h"


EstadoDeAtaque::EstadoDeAtaque(RealizacionDePartida* realizacionDePartida)
{
	this->realizacionDePartida = realizacionDePartida;
}

void EstadoDeAtaque::colocarEjercitos(Jugador* jugador, Territorio* territorio, unsigned int cantidadDeEjercitos) {
	std::cerr<<"Esta accion no es valida para este estado"<<std::endl;
}

void EstadoDeAtaque::reforzarEjercitos(Jugador* jugador) {
	std::cerr<<"Esta accion no es valida para este estado"<<std::endl;
}

/*
 * @throws AtaqueInvalidoException
 */
void EstadoDeAtaque::realizarAtaque(Ataque* ataque) {
	realizadorDeAtaques.realizarAtaque(ataque,realizacionDePartida->getJuego());
	string jugadorEnemigo = ataque->getTerritorioEnemigo()->getEnPoderDe();
	if (ataque->getTerritorioEnemigo()->getCantidadDeEjercitos() == 0) {
		ataque->getTerritorioAtacante()->quitarEjercitos(ataque->getJugadorAtacante()->getCantidadDeEjercitosParaOcupar());
		ataque->getTerritorioEnemigo()->colocarEjercitos(ataque->getJugadorAtacante()->getCantidadDeEjercitosParaOcupar(),
				ataque->getJugadorAtacante()->getColor());
	}
	if (this->realizacionDePartida->getJuego()->getMapa()->getTerritoriosEnPoderDeJugador(jugadorEnemigo) == 0)
		this->realizacionDePartida->getJuego()->quitarJugador(jugadorEnemigo);
}
	
void EstadoDeAtaque::moverEjercitos(Jugador* jugador, Territorio* origen, Territorio* destino, unsigned int cantidadDeEjercitos) {
	realizacionDePartida->setEstado(realizacionDePartida->getEstadoDeFortificacionDeUnidades());
	realizacionDePartida->moverEjercitos(jugador,origen,destino,cantidadDeEjercitos);
}

EstadoDeAtaque::~EstadoDeAtaque()
{
}
